package demo2;

import javax.swing.*;
import java.awt.*;

public class SpringLayoutTest extends JFrame {

    //设置Jpane的布局管理器为SpringLayout;
     SpringLayout springLayout = new SpringLayout();
     JPanel jPanel = new JPanel(springLayout);
      //创建组件
     JLabel titleLabel = new JLabel("文章标题:");
      JTextField titleText = new JTextField() ;
     JLabel authorLabel = new JLabel("作者：");
     JTextField authorText = new JTextField();
     JLabel contLabel = new JLabel("请输入内容" );
     JTextArea contArea = new JTextArea(4,10);

     public SpringLayoutTest(){
        super("弹簧布局");
//JFrame 的内容面板
        Container contentPane = getContentPane();

        //设置所有Text的大小 ；
         titleText.setPreferredSize(new Dimension(200,30));
         authorText.setPreferredSize(new Dimension(200,30));


        //把组件加入到JPanel
         jPanel.add(titleLabel);
         jPanel.add(titleText);
//         jPanel.add(authorLabel);
//         jPanel.add(authorText);
//         jPanel.add(contLabel);
//         jPanel.add(contArea);

         //SpringLayout : 布局管理器
         //SpringLayout.Constraints  : 使用弹簧布局的容器里的组件的布局约束 （每个组件对应一个约束）;
         //Spring  :  可以进行加减乘除的四则运算的整数 ；

         //通过布局管理器获取titleLabel 的布局约束
         SpringLayout.Constraints titleLabelCon = springLayout.getConstraints(titleLabel);
         //通过布局约束 ，设置 titleLabel 的x轴和y轴的偏移量
         //setX的参数需要Spring类型 ， 使用constant方法 来获取
         titleLabelCon.setX(Spring.constant(100));    //x轴偏移100
         titleLabelCon.setY(Spring.constant(50));    //y轴偏移 50

         /*
         设置约束的第一中方法 ，比较复杂
          */

         //设置标题文本框 ，按标题的偏移量计算 ，titleText的西边在 titleLabel的东边20px ,北边一样 ； ，
         SpringLayout.Constraints titleTextCon = springLayout.getConstraints(titleText);
         //通过标题来给标题文本框设置约束 ，用setConstraint 方法设置约束 ；

         //获取 titleLabel的 东边的值 用getConstrain
         Spring titleLabelEast = titleLabelCon.getConstraint(SpringLayout.EAST);
         // setConstraint 参数 1 ： 东西南北 ， 参数2 ： 就是值 （偏移东西南北那边多少）
         //  Spring 不能和 数字直接相加 ， 使用Spring.sum方法（实现相加）
         titleTextCon.setConstraint(SpringLayout.WEST , Spring.sum(titleLabelEast,Spring.constant(20)));
         //titleText  和 titleLabel 的北边相同 ，直接获取 titleLabel的北边值 放进去;
         titleTextCon.setConstraint(SpringLayout.NORTH , titleLabelCon.getConstraint(SpringLayout.NORTH));





         contentPane.add(jPanel);
        //设置大小
        setSize(600,400);
        //居中
        //传一个null居中
        setLocationRelativeTo(null);
        //退出时退出窗口
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        //窗口可见
        setVisible(true);

    }

    public static void main(String[] args) {
        SpringLayoutTest springLayoutTest = new SpringLayoutTest();
    }
}
